package com.lagou.homework3.no5;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class PlayCards {
    private List<String> card;//card集合存储54张牌
    private String[] colors;//colors数组存储牌的花色
    private String[] numbers;//numbers数组存储牌的大小

    //生成无参构造方法
    public PlayCards() {
    }

    //生成有参构造方法
    public PlayCards(List<String> card, String[] colors, String[] numbers) {
        this.card = card;
        this.colors = colors;
        this.numbers = numbers;
    }

    //存储54张牌
    public List<String> savecard() {
        for(String color: colors) {
            for(String number: numbers) {
                //使用card集合依次获取54张牌的花色和大小，例如：color 黑桃 + number 5
                card.add(color + number);
            }
        }
        card.add("!16");//小王
        card.add("!17");//大王
        //使用Collections工具类的shuffle()方法将获取到的54张牌的顺序打乱，也就是“洗牌”
        Collections.shuffle(card);
        return card;
    }

    public List<String> licensing(int k,List<String> cards) {
        /**获取三位玩家以及底牌
         * k=1，2，3分别代表三位玩家的牌
         * k=其他数字代表底牌
         */
        //三位玩家和底牌需要创建成相应的集合来存储各自的牌
        List<String> player1=new ArrayList<String>();
        List<String> player2=new ArrayList<String>();
        List<String> player3=new ArrayList<String>();
        List<String> basecards=new ArrayList<String>();

        for(int i=0;i<cards.size();i++) {//cards集合中存储了54张牌，使用size()方法获取集合中元素个数
            String card=cards.get(i);//使用get(index)方法返回该索引对应cards集合中的那张牌
            if(i<51) {//区间[0,51)一共51张牌，为玩家牌
                if(i%3==0) {//三位玩家按照顺序发牌，对3求余即可
                    player1.add(card);//玩家1的牌
                }else if(i%3==1) {
                    player2.add(card);//玩家2的牌
                }else {
                    player3.add(card);//玩家3的牌
                }
            }else {
                basecards.add(card);//底牌
            }
        }
        /**返回每位玩家各自的牌，以及底牌
         * 这是一个使用泛型、接收集合的方法，最后要返回相应的集合
         */
        if(k==1) {
            return player1;
        }else if(k==2) {
            return player2;
        }else if(k==3) {
            return player3;
        }else {
            return basecards;
        }
    }

    /**
     * 排序展示
     * @param list
     * @return
     */
    public List<String> sorting(List<String> list){
       /* Object[] m = list.toArray();//list集合转成数组
        //按降序排序
        for(int i=0;i<m.length-1;i++)
        {
            for(int j=0;j<m.length-1-i;j++)
            {
                int a = m[j].toString().length()>1?Integer.valueOf(m[j].toString().substring(1)):Integer.valueOf(m[j].toString());
                int b = m[j+1].toString().length()>1?Integer.valueOf(m[j+1].toString().substring(1)):Integer.valueOf(m[j+1].toString());
                if(a<b)
                {
                    String temp=m[j].toString();
                    m[j]=m[j+1];
                    m[j+1]=temp;
                }
            }
        }*/
        //按降序排序
        for(int i=0;i<list.size()-1;i++)
        {
            for(int j=0;j<list.size()-1-i;j++)
            {
                int a = list.get(j).length()>1?Integer.valueOf(list.get(j).substring(1)):Integer.valueOf(list.get(j));
                int b = list.get(j+1).toString().length()>1?Integer.valueOf(list.get(j+1).substring(1)):Integer.valueOf(list.get(j+1));
                if(a<b)
                {
                    Collections.swap(list,j,j+1);
                }
            }
        }
        List<String> result = new ArrayList<>();
        String mm = "";
        for(String s:list){
            if(s.contains("17")){
                result.add("大王");
            }else if(s.contains("16")){
                result.add("小王");
            }else if(s.contains("15")){
                mm= s;
                result.add(mm.replace("15","2"));
            }else if(s.contains("14")){
                mm= s;
                result.add(mm.replace("14","A"));
            }else if(s.contains("13")){
                mm= s;
                result.add(mm.replace("13","K"));
            }else if(s.contains("12")){
                mm= s;
                result.add(mm.replace("12","Q"));
            }else if(s.contains("11")){
                mm= s;
                result.add(mm.replace("11","J"));
            }else{
                result.add(s);
            }
        }

        //按照定义的规则替换成规定的卡片展示
       /* for(Object s:m){
            if(s.toString().contains("17")){
                result.add("大王");
            }else if(s.toString().contains("16")){
                result.add("小王");
            }else if(s.toString().contains("15")){
                mm= s.toString();
                result.add(mm.replace("15","2"));
            }else if(s.toString().contains("14")){
                mm= s.toString();
                result.add(mm.replace("14","A"));
            }else if(s.toString().contains("13")){
                mm= s.toString();
                result.add(mm.replace("13","K"));
            }else if(s.toString().contains("12")){
                mm= s.toString();
                result.add(mm.replace("12","Q"));
            }else if(s.toString().contains("11")){
                mm= s.toString();
                result.add(mm.replace("11","J"));
            }else{
                result.add(s.toString());
            }
        }*/
        return result;
    }

    public List<String> getCard() {
        return card;
    }

    public void setCard(List<String> card) {
        this.card = card;
    }

    public String[] getColors() {
        return colors;
    }

    public void setColors(String[] colors) {
        this.colors = colors;
    }

    public String[] getNumbers() {
        return numbers;
    }

    public void setNumbers(String[] numbers) {
        this.numbers = numbers;
    }
}
